﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AgendaTelefonica.DataAcessObject;
using System.Data;
using System.Xml.Linq;

namespace AgendaTelefonica.BusinessObject
{
    public class ContatoBO
    {
        private XElement contatos;

        public ContatoBO()
        {
            contatos = DataBaseConnection.DataBase.Element("Contatos");
        }
        public Object Consulta(String _strNome)
        {
            Object consulta = null;
            List<XElement> lstElementChild = (from c in contatos.Elements("Contato") select c).ToList();
            if (lstElementChild.Count > 0)
            {
                var query = (from c in lstElementChild select new { Codigo = c.Element("Codigo").Value, Nome = c.Element("Nome").Value, Data_Nascimento = c.Element("DataNascimento").Value, Telefone = c.Element("Telefone").Value, Endereco = c.Element("Endereco").Value, Cidade = c.Element("Cidade").Value, Email = c.Element("Email").Value }).ToList();
                if (!String.IsNullOrEmpty(_strNome))
                    query = query.Where(p => p.Nome.Contains(_strNome)).ToList();
                consulta = query;
            }
            return consulta;
        }
        public XElement GetContato(Int32 _intIdCodigo)
        {
            List<XElement> lstElementChild = (from c in contatos.Elements("Contato") select c).ToList();
            XElement contato = lstElementChild.Where(z => ((Int32)z.Element("Codigo")).Equals(_intIdCodigo)).First();
            return contato;
        }
        public Int32 Insert(ContatoDAO _contato)
        {
            contatos.Add(new XElement("Contato", new XElement("Codigo", _contato.Codigo), new XElement("Nome", _contato.Nome), new XElement("DataNascimento", _contato.DataNascimento.ToString("dd/MM/yyyy")), new XElement("Endereco", _contato.Endereco), new XElement("Cidade", _contato.Cidade), new XElement("Cep", _contato.Cep), new XElement("Email", _contato.Email), new XElement("Telefone", _contato.Telefone)));
            DataBaseConnection.SaveDataBase();
            return _contato.Codigo;
        }
        public void Update(ContatoDAO _contato)
        {
            XElement contato = GetContato(_contato.Codigo);
            contato.Element("Nome").Value = _contato.Nome;
            contato.Element("DataNascimento").Value = _contato.DataNascimento.ToString("dd/MM/yyyy");
            contato.Element("Endereco").Value = _contato.Endereco;
            contato.Element("Cidade").Value = _contato.Cidade;
            contato.Element("Cep").Value = _contato.Cep;
            contato.Element("Email").Value = _contato.Email;
            contato.Element("Telefone").Value = _contato.Telefone;
            DataBaseConnection.SaveDataBase();
        }
        public void Delete(Int32 _intIdCodigo)
        {
            XElement contato = GetContato(_intIdCodigo);
            contato.Remove();
            DataBaseConnection.SaveDataBase();
        }
    }
}
